home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-09 | 61.0 KB | 1,556 lines |
- The setups that the program recognizes are as follows
- (from database.h, enumeration type "setup_kind"), each is
- shown with a map giving the person numbering:
-
- _____
- | |
- 1x1 | 0 | (4 way symmetry)
- |_____|
-
-
- _____ _____
- | | |
- 1x2 | 0 | 1 |
- |_____|_____|
-
-
- _____ _____ _____
- | | | |
- 1x3 | 0 | 1 | 2 |
- |_____|_____|_____|
-
-
- _____ _____ _____ _____
- | | | | |
- 1x4 | 0 | 1 | 3 | 2 |
- |_____|_____|_____|_____|
-
-
- _____ _____ _____ _____ _____ _____
- | | | | | | |
- 1x6 | 0 | 1 | 2 | 5 | 4 | 3 |
- |_____|_____|_____|_____|_____|_____|
-
-
- _____ _____ _____ _____ _____ _____ _____ _____
- | | | | | | | | |
- 1x8 | 0 | 1 | 3 | 2 | 6 | 7 | 5 | 4 |
- |_____|_____|_____|_____|_____|_____|_____|_____|
-
- _____ _____
- | | |
- | 0 | 1 |
- 2x2 |_____|_____| (4 way symmetry)
- | | |
- | 3 | 2 |
- |_____|_____|
-
-
- _____ _____ _____
- | | | |
- | 0 | 1 | 2 |
- 2x3 |_____|_____|_____|
- | | | |
- | 5 | 4 | 3 |
- |_____|_____|_____|
-
-
- _____ _____ _____ _____
- | | | | |
- | 0 | 1 | 2 | 3 |
- 2x4 |_____|_____|_____|_____|
- | | | | |
- | 7 | 6 | 5 | 4 |
- |_____|_____|_____|_____|
-
-
- _____ _____ _____ _____ _____ _____
- | | | | | | |
- | 0 | 1 | 2 | 3 | 4 | 5 |
- 2x6 |_____|_____|_____|_____|_____|_____|
- | | | | | | |
- | 11 | 10 | 9 | 8 | 7 | 6 |
- |_____|_____|_____|_____|_____|_____|
-
-
- _____ _____ _____ _____ _____ _____ _____ _____
- | | | | | | | | |
- | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
- 2x8 |_____|_____|_____|_____|_____|_____|_____|_____|
- | | | | | | | | |
- | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
- |_____|_____|_____|_____|_____|_____|_____|_____|
-
- _____
- _____| |_____
- | | 1 | |
- dmd | 0 |_____| 2 |
- |_____| |_____|
- | 3 |
- |_____|
-
-
- _____
- | |
- | 1 |
- _____|_____|_____
- | | | |
- star | 0 | | 2 | (4 way symmetry)
- |_____|_____|_____|
- | |
- | 3 |
- |_____|
-
-
- _____ _____
- | |_____ _____| |
- | 0 | | | 1 |
- bone6 |_____| 5 | 2 |_____|
- | |_____|_____| |
- | 4 | | 3 |
- |_____| |_____|
-
-
- _____
- | |
- | 1 |
- __|__ __|__
- | | |
- | 0 | 2 |
- short6 |_____|_____|
- | | |
- | 5 | 3 |
- |_____|_____|
- | |
- | 4 |
- |_____|
-
-
- _____ _____
- | | |
- | 0 | 1 |
- _____|_____|_____|_____
- | | | | |
- qtag | 6 | 7 | 3 | 2 |
- |_____|_____|_____|_____|
- | | |
- | 5 | 4 |
- |_____|_____|
-
- _____ _____
- | |_____ _____ _____ _____| |
- | 0 | | | | | 1 |
- bone |_____| 6 | 7 | 3 | 2 |_____|
- | |_____|_____|_____|_____| |
- | 5 | | 4 |
- |_____| |_____|
-
-
- _____ _____
- _____ _____| | |_____ _____
- | | | 0 | 1 | | |
- rigger | 6 | 7 |_____|_____| 3 | 2 |
- |_____|_____| | |_____|_____|
- | 5 | 4 |
- |_____|_____|
-
-
- _____ _____ _____
- _____| | | |_____
- | | 0 | 1 | 2 | |
- spindle | 7 |_____|_____|_____| 3 |
- |_____| | | |_____|
- | 6 | 5 | 4 |
- |_____|_____|_____|
-
-
- _____ _____
- | | |
- | 0 | 1 |
- |_____|_____|
- _____| |_____
- | | 3 | |
- hrglass | 6 |_____| 2 |
- |_____| |_____|
- | 7 |
- __|__ __|__
- | | |
- | 5 | 4 |
- |_____|_____|
-
-
- _____
- | |
- | 2 |
- |_____|
- _____ _____ | | _____ _____
- | | | | 3 | | | |
- crosswave | 0 | 1 | |_____| | 5 | 4 |
- |_____|_____| | | |_____|_____|
- | 7 |
- |_____|
- | |
- | 6 |
- |_____|
-
- _____ _____ _____ _____
- | | | | |
- | 0 | 1 | 2 | 3 |
- |_____|_____|_____|_____|
- | | | | |
- 3x4 | 10 | 11 | 5 | 4 |
- |_____|_____|_____|_____|
- | | | | |
- | 9 | 8 | 7 | 6 |
- |_____|_____|_____|_____|
-
-
- _____ _____ _____ _____
- | | | | |
- | 12 | 13 | 14 | 0 |
- |_____|_____|_____|_____|
- | | | | |
- | 10 | 15 | 3 | 1 |
- 4x4 |_____|_____|_____|_____| (4 way symmetry)
- | | | | |
- | 9 | 11 | 7 | 2 |
- |_____|_____|_____|_____|
- | | | | |
- | 8 | 6 | 5 | 4 |
- |_____|_____|_____|_____|
-
-
- _____ _____ _____ _____ _____ _____
- | | | | | | |
- | 0 | 1 | 2 | 3 | 4 | 5 |
- |_____|_____|_____|_____|_____|_____|
- | | | | | | |
- | 11 | 10 | 9 | 8 | 7 | 6 |
- 4x6 |_____|_____|_____|_____|_____|_____|
- | | | | | | |
- | 18 | 19 | 20 | 21 | 22 | 23 |
- |_____|_____|_____|_____|_____|_____|
- | | | | | | |
- | 17 | 16 | 15 | 14 | 13 | 12 |
- |_____|_____|_____|_____|_____|_____|
-
- _____ _____
- | | | |
- | 1 | | 4 |
- _____|_____|_____ _____|_____|_____
- | | | | | | |
- | 0 | | 2 | 7 | | 5 |
- |_____|_____|_____|_____|_____|_____|
- | | | |
- | 3 | | 6 |
- c1phan |_____| |_____| (4 way symmetry)
- | | | |
- | 14 | | 11 |
- _____|_____|___________|_____|_____
- | | | | | | |
- | 13 | | 15 | 10 | | 8 |
- |_____|_____|_____|_____|_____|_____|
- | | | |
- | 12 | | 9 |
- |_____| |_____|
-
-
- _____ _____
- | | |
- | 0 | 1 |
- _____|_____|_____|_____
- | | | | |
- | 21 | 22 | 2 | 3 |
- _____|_____|_____|_____|_____|_____
- | | | | | | |
- | 19 | 20 | 23 | 5 | 4 | 6 |
- bigblob |_____|_____|_____|_____|_____|_____| (4 way symmetry)
- | | | | | | |
- | 18 | 16 | 17 | 11 | 8 | 7 |
- |_____|_____|_____|_____|_____|_____|
- | | | | |
- | 15 | 14 | 10 | 9 |
- |_____|_____|_____|_____|
- | | |
- | 13 | 12 |
- |_____|_____|
-
-
- _____
- | |
- | 2 |
- __|__ __|__
- _____| | |_____
- | | 1 | 3 | |
- galaxy | 0 |_____|_____| 4 | (4 way symmetry)
- |_____| | |_____|
- | 7 | 5 |
- |_____|_____|
- | |
- | 6 |
- |_____|
-
- _____ _____
- _____| |_____ _____| |_____
- | | 1 | | | 7 | |
- ptpd | 0 |_____| 2 | 6 |_____| 4 |
- |_____| |_____|_____| |_____|
- | 3 | | 5 |
- |_____| |_____|
-
-
- _____
- | |
- | 3 |
- _____ _____ __|__ __|__ _____ _____
- | | | | | | |
- 3x1dmd | 0 | 1 | 2 | 6 | 5 | 4 |
- |_____|_____|_____|_____|_____|_____|
- | |
- | 7 |
- |_____|
-
-
- _____ _____ _____
- | | | | | |
- | 0 | | 1 | | 2 |
- __|__ __|__ __|__ __|__ __|__ __|__
- | | | | | | |
- 3dmd | 9 | 10 | 11 | 5 | 4 | 3 |
- |_____|_____|_____|_____|_____|_____|
- | | | | | |
- | 8 | | 7 | | 6 |
- |_____| |_____| |_____|
-
-
- _____ _____ _____ _____
- | | | | | | | |
- | 0 | | 1 | | 2 | | 3 |
- __|__ __|__ __|__ __|__ __|__ __|__ __|__ __|__
- | | | | | | | | |
- 4dmd | 12 | 13 | 14 | 15 | 7 | 6 | 5 | 4 |
- |_____|_____|_____|_____|_____|_____|_____|_____|
- | | | | | | | |
- | 11 | | 10 | | 9 | | 8 |
- |_____| |_____| |_____| |_____|
-
-
-
-
- _____
- | |
- | 3 |
- _____ _____ _____|_____|_____ _____ _____
- | | | | | | | |
- wingedstar | 0 | 1 | 2 | | 6 | 5 | 4 |
- |_____|_____|_____|_____|_____|_____|_____|
- | |
- | 7 |
- |_____|
-
-
-
- _____
- _____ | | _____
- | | | 3 | | |
- | 2 | |_____| | 5 |
- |_____| | | |_____|
- | 4 |
- _____ _____|_____|_____ _____
- | | | | | |
- hyperglass | 0 | 1 | | 7 | 6 | (4 way symmetry)
- |_____|_____|_____|_____|_____|
- | |
- _____ | 10 | _____
- | | |_____| | |
- | 11 | | | | 8 |
- |_____| | 9 | |_____|
- |_____|
-
-
- _____ _____
- | | |
- | 1 | 2 |
- trngl |_____|_____| (1 way symmetry -- leads to strange
- | | requirements in call descriptions)
- | 0 |
- |_____|
-
-
-
- thar
- nothing ??????
- normal_concentric ??????
-
-
- An important property of these setups, used extensively by the program,
- is that any person's diagonal opposite can be found by adding half the
- setup size modulo the setup size. Additionally, for setups that have
- 4 way symmetry, the person 90 degrees clockwise from a given person can
- be found by adding one quarter of the setup size modulo the setup size.
-
- Before going further, we must distinguish between
- a "beginning setup kind" and an "ending setup kind".
- These are described internally by the enumerations "begin_kind" and
- "setup_kind", respectively, in the file database.h, by the way.
-
- Ending setup kinds correspond to the diagrams shown earlier. They do
- not distinguish between 90 degree rotated versions of the same setup.
- Beginning setup kinds are more numerous because they DO distinguish
- between the 90 degree rotated versions of those setups that do not
- have 4 way symmetry. That is, they take into account the difference
- between lines and columns, so that a call definition can indicate
- separate actions for people in lines vs. people in columns in the
- same 2x4 setup.
-
- The set of beginning setup kinds is just the set of ending setup kinds
- (that is, the diagrams above) augmented by 90 degree rotated versions
- of those setups that don't have 4 way symmetry. The names of these
- extra setups (called "PU" setups) are typically formed by reversing
- the matrix size numbers (1x4 vs. 4x1, for example) or by putting
- the letter "p" in front, as in "pqtag".
-
- The extra beginning setup kinds are as follows:
-
- normal setup "PU" setup
-
- 1x2 2x1
- dmd pmd
- trngl ptrngl
- bone6 pbone6
- short6 pshort6
- qtag pqtag
- wing pwing
- spindle pspindle
- hrglass phrglass
- 1x4 4x1
- 1x8 8x1
- 2x4 4x2
- 2x3 3x2
- 1x6 6x1
- 3x4 4x3
- 2x6 6x2
- 2x8 8x2
- ptpd pptpd
- 3x1dmd p3x1dmd
- 3dmd p3dmd
- 4dmd p4dmd
-
- This correspondence is embodied in the program by means of the table
- "keytab" in the file sdtables.c, by the way.
-
- A call definition by array consists of one or more descriptors that look like:
-
- setup <beginning setup kind> <ending setup kind>
- array [<person action> <person action> ...]
-
- So, for example, the description of the call "drift apart" looks as follows:
-
- setup 2x4 2x4
- array [M6S M4S M7S M5S L2S L0S R3S R1S]
- setup 4x2 2x4
- array [R6S M4N 3LS M5S M2S R4S M3N L1S]
-
- The first descriptor tells people who think they are in lines what to do,
- and the second descriptor addresses people in columns. For calls that start
- in a setup with 4 way symmetry, there is only one descriptor as in the
- following definition of "reach out":
-
- setup 2x2 1x4
- array [M3S M1S R2S L0S]
-
- It is never appropriate for a PU setup, such as "4x2", to
- appear as the SECOND token after the word "setup". Only the FIRST token
- may be such a setup.
-
- An entry of zero in the array means that the call would be illegal for
- anyone in that position, e.g. the leaders in the call "right and left thru".
-
- We can now show the interpretation of a call descriptor for a very simple case,
- when the beginning and ending formations are both in normal orientation,
- as shown in diagrams above. In this case the beginning setup will have the
- same name as an ending setup. The list in brackets will have as many items
- as there are people in the beginning setup. Each person finds his position
- number in that setup, assuming he is facing north. It is as though everyone
- were given the diagrams listed above, and held the diagram in front of him
- to determine his position. Once he determines his position, he looks at that
- item in the bracketed array (starting with zero, of course) to determine
- what to do. The number says what position in the ending setup that person
- should move to. The letter (N, E, S, or W) after the number tells what
- facing direction to take (north, east, south, or west). Both of these are
- interpreted relative to the diagram that the person is holding in front of him.
- So, for example, a direction of north indicates that that person does not
- change facing direction, east indicates that that person finishes 90 degrees
- clockwise from his starting orientation, and so on. Note that all directions
- are north for the call "walk and dodge", and are south for the call "reach
- out". This is so even if the calls are done from T-boned formations.
-
- Finally, the optional letter before the number tells that person's roll
- direction. "L" and "R" indicate that the person will quarter left or
- right if told to roll after the call. "M" ("middle") says that the
- person knows that he can't roll, and will stay facing the same direction.
- No letter means that the person's roll direction is undefined
- (or controversial, or not implemented yet) and an error will be given if
- that person is told to roll. For example, roll is considered illegal
- after "wheel fan and cross thru".
-
- Example:
- In "reach out", the first array item, which is "M3S", says that any
- person in the starting 2x2 box who is a lead beau (position 0 in the
- diagram) should think of a 1x4 line elongated laterally relative to himself,
- and should go to the second spot from the right end (position 3), turn 180
- degrees, and refuse to roll.
-
- This person ---+
- |
- |
- __V__ _____
- | | |
- | 0 | |
- |_____|_____|
- | | |
- | | |
- |_____|_____|
-
- goes here -------+
- |
- |
- _____ _____ __V__ _____
- | | | | |
- | | | 3 | |
- |_____|_____|_____|_____|
-
- If people are T-boned, the application of these rules could result in
- people fighting over which way the resulting 1x4 should be oriented.
- The program will resolve this by turning the result into a diamond if
- it can, or giving an error otherwise.
-
- We will now go through all the cases in a somewhat methodical way.
-
- BEGINNING AND ENDING SETUPS DO NOT HAVE 4 WAY SYMMETRY,
- CALL IS NON-ROTATING
-
- We consider a call to be non-rotating if the starting and ending setups
- have consistent orientation relative to the diagrams above. That is,
- if the beginning setup is oriented as shown in one of the diagrams,
- the ending setup will also be as shown in one of the diagrams. Any
- "non-shape-changer" is such a call. Switch to a diamond is also
- non-rotating. Reverse flip the diamond is not.
-
- In this case, each person holds the diagram in front of him, in normal
- orientation if possible, so that he is facing north, and reads his
- position number from it. He then looks that the correspondingly numbered
- element of the array describing the call in the database, and goes to
- the indicated spot in the result setup, using the same orientation
- of the set of diagrams. For example, on the call "circulate" from a 2x4,
- anyone who thinks he is in lines and is the second from the left looking
- out, will do this:
-
- This person ---+
- |
- |
- _____ __V__ _____ _____
- | | | | |
- | | 1 | | |
- |_____|_____|_____|_____|
- | | | | |
- | | | | |
- |_____|_____|_____|_____|
-
- looks at item number 1 in the call definition array, which is
- setup 2x4 2x4
- array [R3S R2S L1S L0S M3N M2N M1N M0N]
- ^
- |
- item 1
-
- and so goes here ----+
- |
- |
- _____ _____ __V__ _____
- | | | | |
- | | | 2 | |
- |_____|_____|_____|_____|
- | | | | |
- | | | | |
- |_____|_____|_____|_____|
-
- and faces south, ready to roll right.
-
- The procedure just described only works for people who are facing north
- or south in the diagram of the beginning setup. People facing east
- or west do the following: Change the name of the beginning setup to
- its PU name (in this case 4x2) when looking it up in the database
- specification, and turn all the diagrams 90 degrees counterclockwise.
-
- The PU version of the 2x4 setup looks like this:
- _____ _____
- | | |
- | 3 | 4 |
- |_____|_____|
- | | |
- | 2 | 5 |
- 4x2 |_____|_____|
- | | |
- | 1 | 6 |
- |_____|_____|
- | | |
- | 0 | 7 |
- |_____|_____|
-
- If someone is last in a right-hand column, he will do the following:
-
- _____ _____
- | | |
- | | |
- |_____|_____|
- | | |
- | | |
- |_____|_____|
- | | |
- | | |
- |_____|_____|
- | | |
- this person ----->| 0 | |
- |_____|_____|
-
- looks at item number 0 in the call definition array, which is
- setup 4x2 2x4
- array [M1N M2N M3N R4S L3S M4N M5N M6N]
- (Note that the beginning setup is now 4x2, but the ending setup
- is still 2x4. PU names are never used in ending setup names.)
-
- _____ _____
- | | |
- | | |
- |_____|_____|
- | | |
- | | |
- |_____|_____|
- | | |
- and so goes here --->| 1 | |
- |_____|_____|
- | | |
- | | |
- |_____|_____|
-
-
- and faces north, ready to refuse to roll.
-
-
-
- Calls that can handle arbitrary facing directions from beginning setups that
- do not have 4 way symmetry must have 2 entries in the database: a "normal"
- one for people who are facing north or south in the diagrams shown above,
- and a "PU" one for people who are facing east or west. The full
- definition for circulate from arbitrary 2x4's is
-
- setup 2x4 2x4
- array [R3S R2S L1S L0S M3N M2N M1N M0N]
- setup 4x2 2x4
- array [M1N M2N M3N R4S L3S M4N M5N M6N]
-
- When using the PU definition, both the beginning and ending diagrams
- are rotated 90 degrees counterclockwise relative to the above diagrams,
- whether they are the same setup or different setups.
-
- Another example:
-
- Diamonds always have people T-boned. The points use the normal
- definitions and the centers use the PU definitions. The call
- "diamond circulate" is defined as
-
- setup dmd dmd
- array [R1E 0 L1W 0]
- setup pmd dmd
- array [0 R2E 0 L2W]
-
- The zero entries mean that the call is illegal for people who
- are facing directly into or out of the diamond. The legal starting
- positions for the call "diamond single rotate" are the other way around:
-
- setup dmd dmd
- array [0 L0S 0 L2N]
- setup pmd dmd
- array [L3N 0 L1S 0]
-
- The diagram that people use for the PU definition is:
- _____
- | |
- | 2 |
- __|__ __|__
- | | |
- | 1 | 3 |
- |_____|_____|
- | |
- | 0 |
- |_____|
-
-
- Another example:
- The call "flip the diamond" is defined as
-
- setup dmd 1x4
- array [R1S 0 L3S 0]
- setup pmd 1x4
- array [0 R2E 0 L2W]
-
- The centers of the diamond use the PU definition. They
- rotate the ending diagram 90 degrees counterclockwise also,
- so the ending setup is
-
- _____
- | |
- | 2 |
- |_____|
- | |
- | 3 |
- |_____|
- | |
- | 1 |
- |_____|
- | |
- | 0 |
- |_____|
-
-
- BEGINNING AND ENDING SETUPS DO NOT HAVE 4 WAY SYMMETRY,
- CALL IS *ROTATING*
-
- If the beginning and ending setups do not both appear in the above diagrams
- with consistent orientation, do the following:
-
- Invent a new call whose action is the desired call followed by
- a complete rotation of the final poition 90 degrees counterclockwise.
- Enter that new call in the database as described above.
- Put the word "rotate" after the two setup names in each definition
- specification.
-
- The word "rotate" tells the program to rotate the setup resulting from the
- use of that specification clockwise after completion of the call. The call
- "counter rotate" is an example:
-
- setup 2x4 2x4 rotate
- array [R0N R1N L6S L7S L0S L1S R6N R7N]
- setup 4x2 2x4 rotate
- array [R0N R1N R2N R3N L0S L1S L2S L3S]
-
- "Lockit" is another:
-
- setup 1x4 1x4 rotate
- array [R0N R1N L0S L1S]
-
- "Single strut right" is another:
-
- setup 4x1 1x4 rotate
- array [3W 2E 0 0]
-
- Rotating call definitions are confusing to write! The facing direction
- given in the call specification does NOT include the final clockwise
- rotation that the program will perform. In "lockit" person #0 is shown
- not changing his facing direction at all ("N") even though his roll direction
- is "R". This is because his actual 90 degree clockwise turn is entirely
- a consequence of the hidden final rotation. Person #2 is show turning
- 180 degrees. That, plus the final rotation, gives a 90 degree
- counterclockwise turn.
-
- What happens if one of the specifications has the word "rotate" and the
- other does not? If people are not T-boned, there is no problem. Only
- one of the specifications is used. In this case, whether the call is a
- shape-changer would depend on people's facing direction. (The call "change
- your image" comes to mind.) If people are T-boned, the call will be illegal
- with this definition. "Change your image" used to be definied this way,
- and was illegal from T-boned setups. It now uses a different trick, to
- be described much later.
-
- BEGINNING AND ENDING SETUPS BOTH HAVE 4 WAY SYMMETRY
-
- This is straightforward. The word "rotate" is never used with such
- calls, and only one descriptor is required. If people are T-boned when
- the call is executed, the program does what it can. Here is the definition
- of "ripoff":
-
- setup 2x2 2x2
- array [R1S R2N M3N M0N]
-
-
- BEGINNING SETUP HAS 4 WAY SYMMETRY, ENDING SETUP DOES NOT
-
- If the ending setup, relative to people who are facing north when the call
- begins, is oriented as in one of the diagrams above, the situation is
- straightforward, as in "reach out":
-
- setup 2x2 1x4
- array [M3S M1S R2S L0S]
-
- Otherwise, we must use a rotating definition. As above, we define
- a new call that has the effect of the desired call followed by a 90
- degree counterclockwise rotation, encode that into the database, and put
- in the word "rotate". Here is "pass the ocean":
-
- setup 2x2 1x4 rotate
- array [0 0 L1S R0N]
-
- _____ _____
- | | |
- | | |
- |_____|_____|
- | | |
- | 3 | |
- |_____|_____|
- ^
- |
- This person ---+
-
-
- goes here --+ and faces north,
- |
- |
- __V__ _____ _____ _____
- | | | | |
- | 0 | | | |
- |_____|_____|_____|_____|
-
- and then the entire setup is rotated clockwise, resulting in this:
-
- _____
- | |
- | X | facing east
- |_____|
- | |
- | |
- |_____|
- | |
- | |
- |_____|
- | |
- | |
- |_____|
-
- which is of course the desired result.
-
- BEGINNING SETUP DOES NOT HAVE 4 WAY SYMMETRY
- ENDING SETUP DOES
-
- If the beginning setup, relative to people who are facing north,
- is oriented as in one of the diagrams above, the situation is
- straightforward, as in "ah so":
-
- setup 1x4 2x2
- array [R1S L3S L0S R2S]
-
- If the PU beginning setup is required, so that we turn all the
- diagrams counterclockwise, we turn the ending setup's diagram
- counterclockwise also. This is perhaps not intuitive.
- Here is the call "single polly wally":
-
- setup 4x1 2x2
- array [R3S 2N L1S 0S]
-
- beginning PU setup:
- _____
- | |
- | 2 |
- |_____|
- | |
- | 3 |
- |_____|
- | |
- | 1 |
- |_____|
- | |
- | 0 |
- |_____|
-
-
- ending setup -- note that it is rotated with respect to the main
- diagram for a 2x2, so that its orientation is consistent with
- the 4x1 starting setup:
-
- _____ _____
- | | |
- | 1 | 2 |
- |_____|_____|
- | | |
- | 0 | 3 |
- |_____|_____|
-
- Viewed in this way, person zero goes to position 3 and faces south.
- The word "rotate" is not used with such a specification, since the
- orientations of the beginning and ending setups are consistent
- WITH EACH OTHER. (They are both rotated 90 degrees counterclockwise
- from the main diagrams.)
-
- We can of course mix specifications in which the people begin in the
- normal setup and the PU setup. Consider "drop in":
-
- setup dmd 2x2
- array [R0E 0 L1W 0]
- setup pmd 2x2
- array [0 M1N 0 M2N]
-
- For the "normal" people (who are the points):
-
- _____ _____ _____
- _____| |_____ | | |
- | | 1 | | | 0 | 1 |
- | 0 |_____| 2 | --> |_____|_____|
- |_____| |_____| | | |
- | 3 | | 3 | 2 |
- |_____| |_____|_____|
-
- For the "PU" people (who are the centers):
-
- _____
- | |
- | 2 | _____ _____
- __|__ __|__ | | |
- | | | | 1 | 2 |
- | 1 | 3 | --> |_____|_____|
- |_____|_____| | | |
- | | | 0 | 3 |
- | 0 | |_____|_____|
- |_____|
-
- The word "rotate" is not used for either the "dmd" or the "pmd"
- specification.
-
- General rules of thumb:
-
- (1) Never use the word "rotate" with an ending setup that has
- 4-way symmetry. If you think you need to, you are wrong.
- (2) In general, use the word "rotate" for both specifications of a
- multi-specification call, or for neither. If it is used for
- one and not the other, that means that, if people are T-boned,
- they will disagree on whether the call is a shape-changer. The
- only legal case of this is calls with an ending setup which is
- a 2x4. In that case, if people are T-boned, the call will go
- into a 4x4 final setup. This is used in "change your image"
- and "single rotate".
- (3) The word "rotate" simply causes all of the people to turn their
- formation 90 degrees clockwise at the conclusion of the call.
- It is independent of everything else.
- (3) Within any one specification, you must either turn ALL of the
- above diagrams counterclockwise, or NONE of them. In the former
- case, use the "PU" starting setup designation for that
- specification. If you can't define the call this way, define
- a different call and use "rotate" to get the desired behavior.
-
- MULTIPLE SPECIFICATIONS
-
- In general, a call is defined with one or more specifications, each
- giving the rule for one starting setup. An example of this can be
- found in the call "counter rotate", for which a very abbreviated
- definition is:
-
- setup 2x4 2x4 rotate
- array [R0N R1N L6S L7S L0S L1S R6N R7N]
- setup 4x2 2x4 rotate
- array [R0N R1N R2N R3N L0S L1S L2S L3S]
- setup 2x2 2x2
- array [R1E L0W L1W R0E]
- setup dmd dmd rotate
- array [R0N 0 L0S 0]
- setup pmd dmd rotate
- array [0 R1N 0 L1S]
-
- It actually has a specification for just about every starting setup
- that exists. This is because counter rotate is a rather unusual call.
- Many calls have just one definition from one setup. They are legal
- from other setups that are just multiple copies of the given setup.
- For example, "circle to a wave" is just defined from a 2x2 box:
-
- setup 2x2 2x2
- array [0 0 0E 1E]
-
- No other definitions are given. When the call is executed from a
- larger setup, such as lines facing or an 8-chain, the program breaks
- up the larger setup into smaller ones and executes the call separately
- in each smaller setup.
-
- The program's general rule is to search through the given call
- definition for a specification matching the given setup. If no entry
- is found, it attempts to divide the setup into smaller ones. (If
- people are T-boned and the setup does not have 4-way symmetry, it
- actually requires two specifications, for example, 2x4 and 4x2.
- If it finds either one, it does not consider subdividing. If only
- one of the two was present, the people whoe require the other will
- lose. Too bad.)
-
- When the program decides to subdivide the setup, it is guided by the
- specifications that are present for smaller setups. It always begins
- with the least radical subdivision. If the original setup is a 2x4,
- but no 2x4 (or 4x2, as needed) specifications are present, it looks
- for 1x4 (and/or 4x1) specifications. If found, the setup is divided
- that way. If a 2x2 specification is found, it divides the setup that
- way. If both are found, it gives precedence to the 1x4 division.
- If neither a 1x4/4x1 or 2x2 specification is found, it looks for a
- 1x2 and/or 2x1. If found, it subdivides the setup as appropriate.
- If no 1x2/2x1 is found, it searches for a 1x1. Similar subdivision
- searches are performed for other initial setups.
-
- Some of the subdivision rules are actually somewhat tricky. When
- dividing a 2x2 into 1x2's, it looks at people's facing direction
- and checks for the existence of a 1x2 and/or 2x1 specification.
- It requires an unambiguous decision of which axis to use for the
- subdivision. Hence "siamese breakdown" is not permitted in a 2x2,
- and subdivision is not possible if people are T-boned (I think.)
- Similar care is exercised in the 2x4 to 1x2/2x1 subdivision. It
- does the right thing with "heads pass thru; everyone trade".
-
- The reason that "counter rotate" needs so many specifications is that
- this call's definition does not involve the replication of smaller
- versions in larger setups. If it were defined on a 1x4 but not on a
- 1x8, then, if called from a grand wave, it would do a lockit on each
- side, rather than a the gigantic concentric counter rotate that is
- required.
-
- The order in which specifications with different starting setups
- appear is not significant -- the search is always from the largest
- setup to the smallest. Multiple specifications with the same
- starting setup are only meaningful if qualifiers are used (see below),
- and, in that case, they are searched in the order in which they appear.
-
- OVERVIEW OF PREDICATES, RESTRICTIONS, AND QUALIFIERS
-
- These are conditional things that can be placed in calls to perform
- special functions. A brief summary of their meanings is this:
-
- Predicates are applied separately to each person, and are used
- to let a person execute a rule that depends on some property of
- the setup, such as another person's orientation. Example:
- Predicates are used in the call "in roll circulate" to tell people
- who are not inrollers where the inroller is, so they know which way
- to move.
-
- Restrictions are applied to entire setups, and are used to indicate
- that, while the overall setup shape is acceptable, certain aspects
- (for example, facing directions) might be unusual. When a restriction
- is violated, a warning or error arises. This is typically the "do
- your part" warning. Example: A restriction is used on "follow your
- neighbor" to force the "do your part" warning if people are not in
- a normal box. The call could be done from a magic box. [Actually,
- most restrictions should raise errors instead of warnings, but the
- ability to do that is a recent feature.]
-
- Qualifiers are used to control the search for starting setups.
- Rather than causing a warning or error to be raised if the setup
- is inappropriate, a qualifier simply causes that clause to be skipped
- in the search. An example of this is in the call "recycle":
-
- setup 1x4 2x2 qualifier wave_only
- .....
- setup 2x2 1x4
- .....
-
- When done from a 2x4, we want to do the 1x4 version if the people
- are in waves, and the 2x2 version if they are in lines facing. The
- normal preference is for the 1x4 version. The qualifier causes the
- program to look at people's facing direction and ignore the 1x4 clause
- if the people are not in waves. This will cause the 2x2 clause to be
- used instead. If they are neither in waves nor lines facing, the 2x2
- clause will be used and the call will fail, since the 2x2 definition
- requires facing couples.
-
- In using predicates, restrictions, and qualifiers, one must be aware
- of their behavior in the presence of phantoms. Some of them are
- strict -- they require that all necessary people actually be present
- and make up the indicated formation. Others are lax -- they simply
- require that the people who are present be oriented in a way that is
- consistent with the indicated formation. In general, predicates are
- strict (though they typically only look at one other person, not the
- whole setup), and restrictions and qualifiers are lax.
-
- PREDICATES
-
- Predicates are used to indicate, on a person-by-person basis, how
- the call definition is determined by properties of the setup other
- than that person's position and facing direction. If a person's
- action is dependent only on his position and facing direction, as
- it is for most calls, the mechanism already described is sufficient.
- For calls like "cycle and wheel" and "in roll circulate", that isn't
- enough. Some people need guidance from another person.
-
- Predicates are used by replacing the "array" clause:
-
- array [<person action> <person action> ...]
-
- With a "preds" clause:
-
- preds <error message in quotes>
- if <predicate> [<person action> <person action> ...]
- if <predicate> [<person action> <person action> ...]
- ....
-
- For each person, the predicates are evaluated in sequence until one
- is satisfied. When that happens, that person's entry in the
- corresponding action list is used. If no predicate is satisfied for
- some person, the call fails, giving the error message. (In some
- cases, evaluation of a predicate itself gives rise to an error
- message.)
-
- For example, the call "cycle and wheel" is defined this way:
-
- setup 1x4 2x2
- preds "Can't do this call."
- if lines_miniwave [R1S L3N L0S R2N]
- if lines_couple [R1S R0S L0S L1S]
-
- These two predicates are both strict, and both defined for many setups.
- They test the "partner" of the given person, and return true if that
- partner is facing the opposite way or same way, respectively, as the
- given person. If the partner is a phantom or is T-boned to the given
- person, they return false. They do not raise any errors in any case.
- If any person's partner is a phantom or is T-boned, both predicates
- will return false, the program will run out of predicates, and the
- error "Can't do this call" will be raised.
-
- The call could have been defined by:
-
- setup 1x4 2x2
- preds "?"
- if lines_miniwave [R1S L3N L0S R2N]
- if lines_couple [R1S R0S L0S L1S]
- if always [R1S 0 L0S 0 ]
-
- since the ends know what to do anyway. In this case, if an end were
- a phantom and the adjacent center were not, the call would fail with
- a "so-and-so is not able to execute this call" error. This is because,
- when testing the center, the first two predicates would both fail, and
- the third would be used, giving zero, which indicates that the person
- can't do the call.
-
- The definition of "in roll circulate" is:
-
- setup 2x4 2x4
- preds "???"
- if inroller_is_cw [1S 2S 3S 0 0 6S 7S 0N]
- if always [0 0S 1S 2S 3N 4S 5S 0 ]
-
- The predicate "inroller_is_cw" is unusual. It is specifically
- designed for this call. It is defined only for 2x4 lines.
- Some predicates, like "lines_miniwave" and "lines_couple", are
- overloaded -- they have rather general meaning and can be invoked
- from several setups. This predicate, however, is only appropriate
- from 2x4 lines, so it must only be used with a "setup 2x4 ..."
- specification. (In fact, it is only used for this call.)
- Always check the applicable setups before using a predicate.
-
- The predicate "inroller_is_cw" does most of its work when evaluated
- for a center person (spots 1, 2, 5, or 6.) It examines the people
- at the two ends of that person's line. There must be exactly one
- live inroller. An inroller at one end and a phantom at the other
- is legal. It evaluates to true if the inroller is clockwise (around
- the 2x4) from the person in question, false if not. In the latter
- case, the program will use the "always" predicate, which is always
- satisfied, so it will never run off the end of the list. For this
- reason, the error message after the word "preds" is just some question
- marks -- it will never be printed. If the in-roll direction can not
- be determined, the predicate itself raises the error.
-
- For the ends, the in-roll status is clear. Person zero is not an
- inroller. The predicate checks whether the person at the other end
- of his line is an inroller, raising an error if not, and returns true
- if so, since that inroller is clockwise from person zero. For person
- three, the inroller must be at the other end of the line, which is
- counterclockwise, so the predicate either raises an error or returns
- false. Appropriate things are also done with persons four and seven,
- to be sure that the inroller is not ambiguous.
-
- To summarize some general properties of predicates:
-
- (1) Some predicates are "strict" in their examination of other
- people. They demand that the person being examined be alive
- and facing in a certain direction. A few predicates are "lax" --
- they only test for the absence of a person facing in the incorrect
- direction. Always check the documentation of the spefic predicate
- being used.
- (2) Some predicates are applicable on a number of setups, with
- suitable interpretation of what is meant for each setup. Others
- are only applicable to one setup. Always check the documentation
- of the spefic predicate being used.
- (3) Some predicates (the more "generic" ones, in general) do their work
- only by returning TRUE or FALSE. They never raise errors, because
- that would compromise their generality. Other predicates raise
- errors when appropriate, in order to simplify the database. Always
- check the documentation of the specific predicate being used.
-
- The existing predicates are listed in the appendix.
-
-
-
-
-
- APPENDIX A -- PREDICATES
-
- always
- applies to any setup. Returns TRUE in all cases.
-
- x22_miniwave
- applies to 2x2 only. Returns TRUE if the lateral partner of the
- person under test is alive and facing the opposite direction.
- Returns FALSE if the lateral partner is a phantom or faces the
- same way or is T-boned.
-
- x22_couple
- applies to 2x2 only. Returns TRUE if the lateral partner of the
- person under test is alive and facing the same direction. Returns
- FALSE if the lateral partner is a phantom or faces the opposite way
- or is T-boned.
-
- x22_facing_someone
- applies to 2x2 only. Returns TRUE if the vertical partner of the
- person under test is alive and facing the opposite direction.
- Returns FALSE if the vertical partner is a phantom or faces the
- same way or is T-boned. The name may be misleading. It is intended
- to be used to determine if the person being tested is facing someone
- else's face, but, if the two people are back-to-back, the predicate
- will also be satisfied. To get the desired effect, you must only
- use it on people who are trailers.
-
- x14_once_rem_miniwave
- applies to 1x4 only. Returns TRUE if the person once-removed
- from the person under test is alive and facing the opposite direction.
- Returns FALSE if the once-removed person is a phantom or faces the
- same way or is T-boned.
-
- x14_once_rem_couple
- applies to 1x4 only. Returns TRUE if the person once-removed
- from the person under test is alive and facing the same direction.
- Returns FALSE if the once-removed person is a phantom or faces the
- opposite way or is T-boned.
-
- lines_miniwave
- applies to 1x2, 1x4, 1x6, 2x4, 2x6, or 2x8 lines only. Returns TRUE if the
- lateral partner of the person under test is alive and facing the
- opposite direction. Returns FALSE if the partner is a phantom or
- faces the same way or is T-boned.
-
- lines_couple
- applies to 1x2, 1x4, 1x6, 2x4, 2x6, or 2x8 lines only. Returns TRUE if the
- lateral partner of the person under test is alive and facing the
- same direction. Returns FALSE if the partner is a phantom or
- faces the opposite way or is T-boned.
-
- lines_magic_miniwave
- applies to 2x4 lines only. Returns TRUE if the magic partner
- of the person under test (the person in the opposite corner of
- the same box) is alive and facing the opposite direction.
- Returns FALSE if the magic partner is a phantom or faces the same
- way or is T-boned.
-
- lines_magic_couple
- applies to 2x4 lines only. Returns TRUE if the magic partner
- of the person under test (the person in the opposite corner of
- the same box) is alive and facing the same direction.
- Returns FALSE if the magic partner is a phantom or faces the
- opposite way or is T-boned.
-
- lines_once_rem_miniwave
- applies to 2x4 lines only. This is the same as
- "x14_once_rem_miniwave", but used in a 2x4 setup.
-
- lines_once_rem_couple
- applies to 2x4 lines only. This is the same as
- "x14_once_rem_couple", but used in a 2x4 setup.
-
- lines_tandem
- applies to 2x4 lines only. Returns TRUE if the vertical partner
- of the person under test is alive and facing the same direction.
- Returns FALSE if the vertical partner is a phantom or faces the
- opposite way or is T-boned.
-
- lines_antitandem
- applies to 2x4 lines only. Returns TRUE if the vertical partner
- of the person under test is alive and facing the opposite direction.
- Returns FALSE if the vertical partner is a phantom or faces the
- same way or is T-boned.
-
- columns_tandem
- applies to 2x1, 4x1, 6x1, 4x2, 6x2, or 8x2 columns only. Returns TRUE if the
- tandem partner of the person under test is alive and facing the same
- direction. Returns FALSE if that person is a phantom or faces the
- opposite way or is T-boned.
-
- columns_antitandem
- applies to 2x1, 4x1, 6x1, 4x2, 6x2, or 8x2 columns only. Returns TRUE if the
- tandem partner of the person under test is alive and facing the opposite
- direction. Returns FALSE if that person is a phantom or faces the
- same way or is T-boned.
-
- columns_magic_tandem
- applies to 4x2 columns only. Returns TRUE if the magic tandem
- partner of the person under test (the person in the opposite
- corner of the same box) is alive and facing the same direction.
- Returns FALSE if that person is a phantom or faces the
- opposite way or is T-boned.
-
- columns_magic_antitandem
- applies to 4x2 columns only. Returns TRUE if the magic tandem
- partner of the person under test (the person in the opposite
- corner of the same box) is alive and facing the opposite direction.
- Returns FALSE if that person is a phantom or faces the same
- way or is T-boned.
-
- columns_once_rem_tandem
- applies to 4x2 columns only. Returns TRUE if the person
- once-removed from the person under test is alive and facing
- the same direction. Returns FALSE if that person is a phantom
- or faces the opposite way or is T-boned.
-
- columns_once_rem_antitandem
- applies to 4x2 columns only. Returns TRUE if the person
- once-removed from the person under test is alive and facing
- the opposite direction. Returns FALSE if that person is a
- phantom or faces the same way or is T-boned.
-
- columns_couple
- applies to 4x2 columns only. Returns TRUE if the lateral partner
- of the person under test is alive and facing the same direction.
- Returns FALSE if that person is a phantom or faces the opposite
- way or is T-boned.
-
- columns_miniwave
- applies to 4x2 columns only. Returns TRUE if the lateral partner
- of the person under test is alive and facing the opposite direction.
- Returns FALSE if that person is a phantom or faces the same way
- or is T-boned.
-
- 1x2_beau_or_miniwave
- applies to 1x2 lines only. Returns TRUE if this person is a beau,
- or else this belle is in a miniwave with the other person.
- Returns FALSE if this belle is in a couple with the other person.
- Raises an error if this belle can't tell.
-
-
-
- Still to do:
-
- 1x4_wheel_and_deal_1
- 1x4_wheel_and_deal_2
- vert1
- vert2
- inner_active_lines
- outer_active_lines
-
-
-
- judge_is_right
- applies to 1x4 lines only. Returns TRUE if the person on the end
- of the line to this person's right is alive and is a "judge" (extreme
- right end of the line), and it is not the case that the other end
- of the line is occupied by another live judge. Returns FALSE otherwise.
-
- judge_is_left
- applies to 1x4 lines only. Returns TRUE if the person on the end
- of the line to this person's left is alive and is a "judge" (extreme
- right end of the line), and it is not the case that the other end
- of the line is occupied by another live judge. Returns FALSE otherwise.
-
- socker_is_right
- applies to 1x4 lines only. Returns TRUE if the person on the end
- of the line to this person's right is alive and is a "socker" (extreme
- left end of the line), and it is not the case that the other end
- of the line is occupied by another live socker. Returns FALSE otherwise.
-
- socker_is_left
- applies to 1x4 lines only. Returns TRUE if the person on the end
- of the line to this person's left is alive and is a "socker" (extreme
- left end of the line), and it is not the case that the other end
- of the line is occupied by another live socker. Returns FALSE otherwise.
-
- inroller_is_cw
- applies to 2x4 lines only. Returns TRUE if the end of the line clockwise
- from this person is a live inroller (facing in) and the other end of that
- line is not occupied by another live inroller. Returns FALSE if the end
- of the line counterclockwise from this person is a live inroller and the
- other end of that line is not occupied by another live inroller.
- Otherwise, raises an error.
-
- magic_inroller_is_cw
- applies to 2x4 lines only. Same as inroller_is_cw, but applies to this
- person's magic line.
-
- outroller_is_cw
- applies to 2x4 lines only. Same as inroller_is_cw, but checks for live
- outrollers.
-
- ******* why is there no magic_outroller_is_cw ??????
-
- outposter_is_cw
- applies to 2x4 lines only. Returns TRUE if the end of the line clockwise
- from this person is the outposter. The rules for outposters are different
- from the rules for outrollers: if both ends of the line are looking out,
- the one on the right (the "judge") is the outposter -- there is no conflict.
- Returns FALSE if the outposter is at the counterclockwise end of the line,
- or there is no live outposter.
-
- outposter_is_ccw
- applies to 2x4 lines only. Returns TRUE if the end of the line counterclockwise
- from this person is the outposter. Returns FALSE if the outposter is at the
- clockwise end of the line, or there is no live outposter.
-
- Still to do:
-
- nexttrnglspot_is_tboned
- applies to triangles only. This is intended to determine which way a
- person should face after doing a triangle circulate. Returns FALSE if
- this person is a base and will still be a base after circulating,
- independently of the existence or facing direction of the person already
- standing on the target spot. If this person is a base circulating to an
- apex spot or vice-versa, it demands that there be a person already standing
- on the target spot. It returns TRUE if that person is facing perpendicular
- to the subject person, and FALSE if that person is facing the same way or
- opposite way. It returns an error if a triangle circulate is impossible
- for the subject, or if there is no person on the target spot and such a
- person is needed.
-
- next62spot_is_tboned
- applies to short6 only. This is intended to determine which way a
- person should face after doing the outsides part of a 6x2 acey-deucey.
- Returns FALSE if this person is in the box of 4 (normally, one of the
- diamond points for 6x2 acey-deucey), whether this person will circulate
- to an apex (end of the center line for 6x2 acey-deucey) spot or not.
- If this person is an apex, it demands that there be a person already
- standing on the target spot. It returns TRUE if that person is facing
- perpendicular to the subject person, and FALSE if that person is facing
- the same way or opposite way. It returns an error if an outer 6 circulate
- is impossible for the subject (this can only happen if the subject is an
- apex), or if there is no person on the target spot and such a person
- is needed.
-
- next_magic62spot_is_tboned
- applies to short6 only. This is the same as "next62spot_is_tboned",
- but it uses the "magic 6x2 acey deucey" circulate path in calculating
- the target spot.
-
-
- next_galaxyspot_is_tboned
- column_double_down
-
-
-
- boyp
- applies to any setup. Returns TRUE if this person is an unambiguous boy.
- Returns FALSE if not. The person's gender is ambiguous if the "as couples"
- or "tandem" concept has caused people of opposite gender to be paired.
-
- girlp
- applies to any setup. Returns TRUE if this person is an unambiguous girl.
- Returns FALSE if not. The person's gender is ambiguous if the "as couples"
- or "tandem" concept has caused people of opposite gender to be paired.
-
- roll_is_cw
- applies to any setup. Returns TRUE if this person's roll direction, from
- the preceding call, is clockwise. Returns if the direction is
- counterclockwise, or the person can't roll, or roll direction from the
- preceding call is ill-defined.
-
- roll_is_ccw
- applies to any setup. Returns TRUE if this person's roll direction, from
- the preceding call, is counterclockwise. Returns if the direction is
- clockwise, or the person can't roll, or roll direction from the
- preceding call is ill-defined.
-
- x12_boy_facing_girl
- applies to 2x1 columns only. Returns TRUE if this person is an
- unambiguous boy, and the other person in the column is alive and an
- unambiguous girl. Facing directions are not checked.
-
- x12_girl_facing_boy
- applies to 2x1 columns only. Returns TRUE if this person is an
- unambiguous girl, and the other person in the column is alive and an
- unambiguous boy. Facing directions are not checked.
-
- x22_boy_facing_girl
- applies to 2x2 boxes only. Returns TRUE if this person is an
- unambiguous boy, and the person in the box that this person faces
- is alive and an unambiguous girl. The facing direction of that other
- person is not checked.
-
- x22_girl_facing_boy
- applies to 2x2 boxes only. Returns TRUE if this person is an
- unambiguous girl, and the person in the box that this person faces
- is alive and an unambiguous boy. The facing direction of that other
- person is not checked.
-
- dmd_ctrs_rh
- applies to a diamond or single 1/4-tag. Returns TRUE if the center
- two people are in a right-handed miniwave. Returns FALSE if they
- are in a left-handed miniwave. One live person in the center is
- sufficient to make the test. Raises an error if the centers are
- both phantoms or they are not in a miniwave. This predicate is
- unusual in that it does not look specifically at the person under
- test. It evaluates the setup as a whole.
-
- trngl_pt_rh
- Applies to a triangle. This is strict relative to the point.
- Returns TRUE if the triangle point is as if in a right-handed triangle
- (independently of the existence or facing direction of the base people).
- Returns FALSE if the triangle point is as if in a left-handed triangle.
- Raises an error if the point is a phantom or is facing toward or
- away from the base. This predicate is unusual in that it does not
- look specifically at the person under test. It evaluates the setup
- as a whole.
-
- Still to do:
-
- q_tag_front
- Applies to a qtag only. (Remember that we use the term "qtag"
- independently of actual facing direction -- it applies to 3/4 tags,
- 1/4-lines, diamonds, etc. Part of the purpose of this predicate
- is to distinguish among these cases.) This is strict relative to the
- people it tests. For a person in the center line, this returns TRUE
- if the subject's partner is alive and facing in the opposite direction,
- and FALSE otherwise. That is, it performs a strict test for the
- subject being in a miniwave, which presumably means the setup is a
- 1/4-tag as opposed to a 1/4-line. For a person on the outside,
- this returns TRUE only if the two people in the center line who are
- closest to the subject are both alive and in a miniwave with each
- other, and the end of that line is facing the subject. It returns
- FALSE otherwise. For example, for an outside beau in a 1/4-tag or
- 1/4-line, it returns TRUE only if the setup is a left-handed 1/4-tag,
- and FALSE if it is right-handed or is a 1/4-line. It only examines
- the two center people close to the subject (the ones in the subject's
- single 1/4-tag) in making this determination. When applying the test
- to an outside, the subject's own facing direction is not important.
- For example, in a right-hand 3/4-tag, this will return TRUE for an
- outside beau and FALSE for an outside belle. In diamonds of any
- consistent handedness, this returns TRUE for a trailing point and
- FALSE for a leading point.
-
- q_tag_back
-
-
-
- q_line_front
- q_line_back
-
- APPENDIX B -- ESCAPE CODES IN CALL NAMES
-
- These are not in a particularly logical order.
-
- @0 - for call with mandatory substitution (e.g. "clover and ...") put
- subcall here.
- @1 - put optional subcall here.
- @2 ... @3 - text to remove and replace with subcall. Like @4 ... @5 along with @1.
- @4 ... @5 - text to remove if optional substitution has been made.
- @6 - put selector here.
- @7 ... @8 - text to ADD if optional substitution has been made, as in the "ing"
- for "fascinating <anything>".
- @9 - put number here.
- @a - put number here, expressed as N/4, but say "full" instead of 4/4.
- @b - put number here, expressed as N/4.
- @c ... @d - text to remove if this call was invoked with a "must_be_tag_call"
- substitution.
- @e ... @f - text to change to "left" if this call has "left" modifier.
- Must use @g also if this appears.
- @g - at beginning of call name: an @e...@f sequence will occur.
- @h - at beginning of call name: if this is invoked with "single"
- concept, change to "single file".
- @i - at beginning of call name: an @j...@l sequence will occur.
- @j ... @l - text to add if this call has "cross" modifier. Presumably
- has the word "cross" in it.
- Must use @i also if this appears.
- @k - put selector here, but use singular name, as in "beau tie".
-